#include "app_message.h"
#include "app_Common.h"

/**
 * @brief 将json格式字符串转换为字节数组
 *
 * @param json json字符串
 * @param bytesbuf 字符数组
 * @param datalen 转换后的字符数组的长度
 */
void App_Message_json_to_bytes(char *json, char *bytesbuf, int *datalen)
{
    /*创建空项目并解析json字符串*/
    cJSON *object = NULL;
    object = cJSON_Parse(json);
    if (object == NULL)
    {
        printf("Parse Fail...\n");
        return;
    }
    /*获取项目中的item*/
    cJSON *json_conn_type = cJSON_GetObjectItem(object, "conn_type");
    cJSON *json_id = cJSON_GetObjectItem(object, "id");
    cJSON *json_msg = cJSON_GetObjectItem(object, "msg");
    /*获取item中的整型键值*/
    int conn_type = json_conn_type->valueint;
    /*获取item中的字符串类型的键值*/
    char *id = cJSON_GetStringValue(json_id);
    char *msg = cJSON_GetStringValue(json_msg);
    /*将json字符串转化为字符数组*/
   int id_len = App_Common_hexstr_to_bytes(id,bytesbuf + 3);
   int msg_len = App_Common_hexstr_to_bytes(msg,bytesbuf + 3 + id_len);
    bytesbuf[0] = conn_type;
    bytesbuf[1] = id_len;
    bytesbuf[2] = msg_len;
   /*获取字符数组长度*/
   *datalen = id_len + msg_len +3;
   /*删除object释放内存*/
   cJSON_Delete(object);
}

/**
 * @brief 将字符数组转换成json格式的字符串
 *
 * @param json 转换后的json字符串
 * @param bytesbuf 字符数组
 * @param datalen 传入的json缓冲区的大小
 */
void App_Message_bytes_to_json(char **json, char *bytesbuf, int jsonbuf_len)
{
    /*获取消息流向*/
      int conn_type = bytesbuf[0];
      /*获取id和消息的数据长度*/
      int id_len = bytesbuf[1];
      int msg_len = bytesbuf[2];
      /*定义id和msg的16进制字符串指针并申请空间*/
      char* id_hexstr = (char*)malloc(id_len * 2 + 1);
      char* msg_hexstr = (char*)malloc(msg_len * 2 +1);
      /*将字符数组内对应的id信息和msg数据转化为16进制字符串*/
      App_Common_bytes_to_hexstr(bytesbuf + 3,id_hexstr,id_len);
      App_Common_bytes_to_hexstr(bytesbuf + 3 + id_len,msg_hexstr,msg_len);
      /*创建一个cJSON的空项目*/
      cJSON* object = NULL;
      object = cJSON_CreateObject();
      if (object == NULL)
      {
        printf("cJSON Create Fail...\n");
        return;
      }
      /*向空项目中添加item*/
      cJSON_AddNumberToObject(object,"conn_type",conn_type);
      cJSON_AddStringToObject(object,"id",id_hexstr);
      cJSON_AddStringToObject(object,"msg",msg_hexstr);
      /*生成无格式的json字符串*/
      *json = cJSON_PrintUnformatted(object);
    //   printf("json:%s\n",json);
      if ((int)strlen(*json) > jsonbuf_len)
      {
        printf("JSON Buff Insufficient,Partially Overwritten Data...\n");
      }
      /*将项目删除释放内存*/
      cJSON_Delete(object);
      /*释放内存*/
      free(id_hexstr);
      free(msg_hexstr);
    //   printf("json:%s\n",json);

}
